package cn.edu.lcu.cs.javaweb.dao;

import java.util.List;

import cn.edu.lcu.cs.javaweb.entity.User;

/**
 * 用户DAO
 * 
 * @author Ling
 *
 */
public interface UserDao {

	/**
	 * 根据ID查询，返回单个值
	 * 
	 * @param id
	 * @return
	 */
	User findById(Long id);

	/**
	 * 查询所有用户
	 * 
	 * @return
	 */
	List<User> findAll();

	/**
	 * 根据用户名查询，返回多个值
	 * 
	 * @param username
	 * @return
	 */
	List<User> findByUsername(String username);

	/**
	 * 根据用户名及密码进行认证，返回认证通过的用户实例
	 * 
	 * @param username
	 * @param password
	 * @return 认证通过的用户，若认证失败返回null
	 */
	User authenticate(String username, String password);

	/**
	 * 添加用户
	 * 
	 * @param user
	 * @return 若添加成功，返回该用户（包含数据库自动生成的主键）；若添加失败，返回null
	 */
	User save(User user);

	/**
	 * 依据用户ID删除用户
	 * 
	 * @param id
	 * @return 删除用户记录的数量，若删除失败返回0
	 */
	int delete(Long id);

	/**
	 * 更新用户信息
	 * 
	 * @param user
	 * @return 更新记录的条数，若更新失败返回0
	 */
	int update(User user);

	long count();

}